<?php

/**
 * controler para MrpProOrdController
 *
 * @author hparra
 */

require_once 'class/im/dlv/DP/SoDeliveryDP.class.php';
require_once 'class/im/dlv/DP/SoDeliveryLineaDP.class.php';
require_once 'class/im/dlv/FN/SoDeliveryFN.class.php';

require_once($_SERVER['DOCUMENT_ROOT'].'/gourmet-express/trunk/src/class/im/mov/DP/ImStockMovimDP.class.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/gourmet-express/trunk/src/class/im/mov/DP/ImStockDP.class.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/gourmet-express/trunk/src/class/im/mov/FN/ImStockFN.class.php');

require_once 'class/mrp/ordenes/DP/MrpOrdenProduccionDP.class.php';
require_once 'class/mrp/ordenes/FN/MrpOrdenProduccionFN.class.php';
require_once 'class/mrp/ordenes/DP/MrpOrdenproduccionDetDP.class.php';
require_once 'class/mrp/ordenes/FN/MrpOrdenproduccionDetFN.class.php';
require_once 'class/im/alm/FN/ImAlmacenFN.class.php'; 
require_once('class/mrp/recetas/FN/MrpRecetaFN.class.php');
require_once('class/mrp/recetas/FN/MrpRecetaDetalleFN.class.php');
require_once('class/im/mov/FN/ImStockFN.class.php');


class MrpProOrdAjustController extends ControllerBase

{    

   public function procesar($ordenProduccionNro){  
        if ($ordenProduccionNro) {                 
            $o_MrpOrdenProduccionFN     = new MrpOrdenProduccionFN(); 
            $o_MrpOrdenProduccionDetFN  = new MrpOrdenproduccionDetFN();            
            $o_MrpOrdenProduccionFN->setPdoOrdenId($ordenProduccionNro);
            $o_MrpOrdenProduccionDetFN->setOrdenId($ordenProduccionNro);
            $o_rptaH                    = $o_MrpOrdenProduccionFN->selectByPK();
            $o_rptaDet                  = $o_MrpOrdenProduccionDetFN->selectExtend();                       
            if (is_array($o_rptaH) && is_array($o_rptaDet)){

                //genera documento de salida de materia prima

                $o_SoDeliveryDP = new SoDeliveryDP();                        
                $o_SoDeliveryDP->setTipo("P");
                $o_SoDeliveryDP->setDlvNum("");
                $o_SoDeliveryDP->setAlmId($o_rptaH->pdo_almacenId);
                $o_SoDeliveryDP->setClienteId("");
                $o_SoDeliveryDP->setClienteNombre("interno");
                $o_SoDeliveryDP->setContacto("");
                $o_SoDeliveryDP->setDocReferNum($o_rptaH->pdo_ordenId);
                $o_SoDeliveryDP->setFacturaNum();
                $o_SoDeliveryDP->setMoneda("NAC");
                $o_SoDeliveryDP->setFechaRequerida(date("Y-m-d"));
                $o_SoDeliveryDP->setFechaProgramada(date("Y-m-d"));
                $o_SoDeliveryDP->setFechaSalida(date("Y-m-d"));
                $o_SoDeliveryDP->setFlete();
                $o_SoDeliveryDP->setObs("Automatico segun OP. ".$o_rptaH->pdo_ordenId);   
                $o_SoDeliveryDP->save();
                //generar documento de salida - detalle
                $i=1;
                foreach ($o_rptaDet as $iKey => $value) {
                    
                    $o_SoDeliveryLineaDP = new SoDeliveryLineaDP();
                    $o_SoDeliveryLineaDP->setDlvId($o_SoDeliveryDP->getId());	      
                    $o_SoDeliveryLineaDP->setLineaId($i);               
                    $o_SoDeliveryLineaDP->setArtId($this->requestVars["a_ItemId"][$iKey]);                        
                    $o_SoDeliveryLineaDP->setCant($this->requestVars["a_Cant"][$iKey]);
                    $o_SoDeliveryLineaDP->setCosto($this->requestVars["a_Costo"][$iKey]);
                    $o_SoDeliveryLineaDP->setCreaFecha(date('Y-m-d'));
                    $o_SoDeliveryLineaDP->save();
                    $i++;
                }

                //generar documento de ingreso - cabecera

                $o_PoRecepcionDP  = new PoRecepcionDP();
                $o_PoRecepcionDP->setTipo("P");
                $o_PoRecepcionDP->setPoNro("");
                $o_PoRecepcionDP->setAlmId($o_rptaH->pdo_almacenId);                
                $o_PoRecepcionDP->setProveedorId("");
                $o_PoRecepcionDP->setProveedorNombre("");
                $o_PoRecepcionDP->setContacto("");
                $o_PoRecepcionDP->setDocIngresoTipo("OP"); /*****  OJO REVISAR   *****/
                $o_PoRecepcionDP->setDocIngresoNum($o_rptaH->pdo_ordenId);
                $o_PoRecepcionDP->setFacturaNum("");
                $o_PoRecepcionDP->setMoneda("");
                $o_PoRecepcionDP->setFechaDocIngreso(date("Y-m-d"));
                $o_PoRecepcionDP->setFechaIngreso(date("Y-m-d"));
                $o_PoRecepcionDP->setFechaFactura("");
                $o_PoRecepcionDP->setFlete("");
                $o_PoRecepcionDP->setObs("Automatico segun OP. ".$o_rptaH->pdo_ordenId);
                $o_PoRecepcionDP->save();                
                //generar documento de ingreso - detalle
                $o_PoRecepcionLineaDP = new PoRecepcionLineaDP();
                $o_PoRecepcionLineaDP->setRcpId($o_PoRecepcionDP->getRcpId());	      
                $o_PoRecepcionLineaDP->setLineaId("1");               
                $o_PoRecepcionLineaDP->setArtId($o_rptaH->pdo_productoId);                        
                $o_PoRecepcionLineaDP->setCant($o_rptaH->pdo_cantidad);
                $o_PoRecepcionLineaDP->setCosto("");
                $o_PoRecepcionLineaDP->setCreaFecha(date('Y-m-d'));
                $o_PoRecepcionLineaDP->save();                

                $this->cerrarAjust();                

            }
        }          
    }
 

    public function cerrarAjust(){
       if ($this->requestVars)
       {   
          if (array_key_exists('rcpId', $this->requestVars)) 
          {     
            $o_PoRecepcionFN = new PoRecepcionFN();
            $o_PoRecepcionFN->setRcpId($this->requestVars["rcpId"]);
            $o_PoRecepcionBN = $o_PoRecepcionFN->getPoRecepcion();  
          }
       }
       if ($o_PoRecepcionBN->getStatus() != 'C'){
           $a_detalleRcp = $o_PoRecepcionBN->getO_PoRecepcionLineaBN();
           foreach ($a_detalleRcp as $iKey => $value)
           { 
               $o_ImStockMovimDP  = new ImStockMovimDP();
               $o_ImStockMovimDP->setAlmId($o_PoRecepcionBN->getAlmId());
               $o_ImStockMovimDP->setArtId($value->getArtId());
               $o_ImStockMovimDP->setCant($value->getCant());
               $o_ImStockMovimDP->setCosto($value->getCosto());
               $o_ImStockMovimDP->setCreaFecha(date("Y-m-d H:i:s"));
               $o_ImStockMovimDP->setCreaUsr($value->getCreaUsr());
               $o_ImStockMovimDP->setDocId($o_PoRecepcionBN->getDocIngresoNum());
               $o_ImStockMovimDP->setDocNum($o_PoRecepcionBN->getDocIngresoNum());
               $o_ImStockMovimDP->setDocReferenNro($o_PoRecepcionBN->getFacturaNum());
               $o_ImStockMovimDP->setIngSal("I");
               $o_ImStockMovimDP->setMovFecha(date("Y-m-d"));
               $o_ImStockMovimDP->setMovTipo("C");
               $o_ImStockMovimDP->save();
               $o_ImStockFN= new ImStockFN();

               $o_ImStockDP  = new ImStockDP();
               $o_ImStockDP->setAlmId($o_PoRecepcionBN->getAlmId()) ;   
               $o_ImStockDP->setArtId($value->getArtId());
               $o_ImStockDP->setCostoUlt($value->getCosto());

               $o_ImStockFN->setAlmId($o_PoRecepcionBN->getAlmId());
               $o_ImStockFN->setArtId($value->getArtId());
               $o_ImStockBN = $o_ImStockFN->selectByPK();
               if ($o_ImStockBN){
                   $o_ImStockDP->setCantFisico($o_ImStockBN->getCantFisico() + $value->getCant());
                   $o_ImStockDP->update();
               }else{
                   $o_ImStockDP->setCantFisico($value->getCant());
                   $o_ImStockDP->save();               
               }
               $result = $o_ImStockFN->select();
           }
           $o_PoRecepcionDP = new PoRecepcionDP();
           $o_PoRecepcionDP->setRcpId($this->requestVars["rcpId"]);       
           $o_PoRecepcionDP->setStatus("C");
           $o_PoRecepcionDP->update();
           $vars['result'] = $result;
           $vars['stockFN'] = $o_ImStockFN;
           $a_result['rcpId'] = $this->requestVars["rcpId"];
           $a_result['rpta'] = 'true';
       }else{
           $a_result['rpta'] = false;           
       }
       echo json_encode($a_result);
   }        
        
}

?>
